package com.github.phoenics.newlives.common.converter;

import cn.hutool.json.JSONUtil;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import java.lang.reflect.ParameterizedType;

/**
 * JPA json字段
 *
 * @author Phoenics Chow
 * on 2019年12月10日
 */
@Converter(autoApply = true)
public abstract class JpaConverterJson<T> implements AttributeConverter<T, String> {

    @Override
    public String convertToDatabaseColumn(T t) {
        return JSONUtil.toJsonStr(t);
    }

    @Override
    public T convertToEntityAttribute(String s) {
        return JSONUtil.toBean(s,getTClass());
    }
    private Class<T> getTClass() {
        return (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }
}
